/**
 * 定义
 *
 * date: 2020-10-2
 * ----------------------
 *
 * 当前 js 文件就是模块文件，
 * 通过define去定义的叫做模块，
 * 一般情况下，一个模块文件中只有一个模块。 -----> 重要 - 重要 - - - 重要 - -
 *
 *
 * this 指向window对象，不建议使用this
 *      去定义相关属性和值，
 *      避免全局变量的污染
 *
 * 常用， 一2 中的 函数方式 (line: 32)
 */



// console.log('this=', this)
//
// ------------------------------------
//
// 一、define 是一个函数，函数中有三个参数，
//        定义模块的有以下几种
// 1、传递值类型: 数字、字符串、布尔值
define(11)
define('hello')
define(true)

// 2、传递引用数据: 数组，对象，函数
// (1)
// define([1, 2, 3]);
// define({a: 'srxboys', age: 10});
// define( function() {
//   console.log(this, arguments)
//   // 没有返回值， seajs.use的打印是空对象
// });

// (2)
// 这里不支持 es6-js 的语法， arguments 报错
// define( () => {
//   console.log(this, arguments)
// });

// (3)
define( function(require, exports, module) {
  console.log(this, arguments)
});




// ------------------------------------

// 二、传递两个参数
// 1、 字符串
// 第一个参数指定模块id，字符串类型
// 第二个参数是一个回调函数

// (1) id 不正确
//     id类型为字符串，如果不能正确指定这个id
//     那么获取到的是 undefine
define('a', function() {
  console.log(this, arguments)
})

// (2) id 是路径
define('module/main', function() {
  console.log(this, arguments)
})

// 2、数组
// 第一个参数是一个数组，里面存储的是模块的依赖集合
// 第二个参数是一个回到
define(['module/main'], function() {
  console.log(this, arguments)
})



// ------------------------------------
// 三、传递三个参数
// 第一个参数是 字符串，指定模块id
// 第二个参数是 数组，存储的是模块的依赖集合
// 第三个参数是 回调

// (1) id 错误
// define('a', ['module/A'], function() {
//   console.log(this, arguments)
// })

// (2) 正确的
define('module/main', ['module/A'], function() {
  console.log(this, arguments)
})